package com.note.feng.leetcode.algorithms.easy.six;

import java.util.Arrays;

public class SixHundredTwentyEight {
    /**
     * 628 三个数的最大乘积
     * 给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
     *
     * 示例 1：
     *
     * 输入：nums = [1,2,3]
     * 输出：6
     * 示例 2：
     *
     * 输入：nums = [1,2,3,4]
     * 输出：24
     * 示例 3：
     *
     * 输入：nums = [-1,-2,-3]
     * 输出：-6
     *  
     * 提示：
     *
     * 3 <= nums.length <= 104
     * -1000 <= nums[i] <= 1000
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/maximum-product-of-three-numbers
     */
    /**
     * 解法：排序
     * 会有以下 3 种情况：
     * 1、数组中都是非负整数，最大乘积一定是3个最大数的乘积；
     * 2、数组中都是负整数，最大乘积一定是3个最大数的乘积；
     * 3、数组中有正整数和负整数，最大乘积可能是3个最大正整数，也可能是两个最小的负整数与最大正整数的乘积
     * @param nums
     * @return
     */
    public int maximumProduct(int[] nums) {
        Arrays.sort(nums);
        int len = nums.length;
        int res = nums[len - 1] * nums[len - 2] * nums[len - 3];
        int res1 = nums[0] * nums[1] * nums[len - 1];
        return Math.max(res, res1);
    }
}
